js中数组indexOf方法的使用和实现

您所在的位置:网站首页 indexof js 数组 js中数组indexOf方法的使用和实现

js中数组indexOf方法的使用和实现

2023-10-25 18:36| 来源: 网络整理| 查看: 265

js中数组indexOf方法的使用和实现 IndexOf方法定义

indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

IndexOf方法语法

arr.indexOf(searchElement[, fromIndex])

参数

searchElement 要查找的元素

fromIndex 可选 开始查找的位置(默认从0 开始)。

返回值

首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1

详细描述

indexOf方法查找到第一个传入的元素,并返回当前元素的索引,如果没找到就就返回-1。

它有两个参数: searchElement 要查找的元素 fromIndex 非必填 开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回-1。如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即-1表示从最后一个元素开始查找,-2表示从倒数第二个元素开始查找 ,以此类推。 注意:如果参数中提供的索引值是一个负值,并不改变其查找顺序,查找顺序仍然是从前向后查询数组。如果抵消后的索引值仍小于0,则整个数组都将会被查询。其默认值为0.

使用示例

查询元素在数组中的位置

let arr1 = ['a', 'b', 'c'] const r1 = arr1.indexOf('a') console.log(r1) // 0 const r2 = arr1.indexOf('a', 1) console.log(r2) // -1 const r3 = arr1.indexOf('a', -1) console.log(r3) // -1 const r4 = arr1.indexOf('c') console.log(r4) // 2 const r5 = arr1.indexOf('c', 1) console.log(r5) // 2 const r6 = arr1.indexOf('c', -1) console.log(r6) // 2

找出指定元素出现的所有位置

let indexList = []; let arr2 = ['a', 'b', 'a', 'c', 'a', 'd']; let element = 'a'; let index = arr2.indexOf(element); while (index !== -1) { indexList.push(index); index = arr2.indexOf(element, index + 1); } console.log(indexList); // [0, 2, 4]

上述代码会查找出指定元素在数组中出现的所有位置。根据上述用法和描述来模拟实现自己的indexOf方法。

步骤思路

1、将自己的方法挂在到数组的原型上 2、传入搜寻的参数和起始索引 3、判断数组长度是否为0,或者传入的fromIndex 是否大于数组长度 4、处理fromIndex 传入为负数情况 5、循环判断传入的元素是否相当,返回当前元素索引

实现代码 Array.prototype.myIndexOf = function(searchElement, fromIndex ) { let length = this.length let fi = +fromIndex || 0 if (fi > length || length === 0) return -1 // 处理传入fromIndex为负数的情况 fi = fi >= 0? fi: length - Math.abs(fi) for (let index = fi; index < length; index++) { if (this[index] === searchElement) return index } return -1 } 测试验证 Array.prototype.myIndexOf = function(searchElement, fromIndex ) { let length = this.length let fi = +fromIndex || 0 if (fi > length || length === 0) return -1 // 处理传入fromIndex为负数的情况 fi = fi >= 0? fi: length - Math.abs(fi) for (let index = fi; index < length; index++) { if (this[index] === searchElement) return index } return -1 } let arr1 = ['a', 'b', 'c'] const r1 = arr1.myIndexOf('a') console.log(r1) // 0 const r2 = arr1.myIndexOf('a', 1) console.log(r2) // -1 const r3 = arr1.myIndexOf('a', -1) console.log(r3) // -1 const r4 = arr1.myIndexOf('c') console.log(r4) // 2 const r5 = arr1.myIndexOf('c', 1) console.log(r5) // 2 const r6 = arr1.myIndexOf('c', -1) console.log(r6) // 2 const r7 = arr1.myIndexOf('d') console.log(r7) // -1 let indexList = []; let arr2 = ['a', 'b', 'a', 'c', 'a', 'd']; let element = 'a'; let index = arr2.myIndexOf(element); while (index !== -1) { indexList.push(index); index = arr2.myIndexOf(element, index + 1); } console.log(indexList); // [0, 2, 4]

由打印结果看测试结果和原方法一致。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3